package com.wangc.commons.configuration.swagger;

import com.google.common.base.Predicates;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * Swagger配置类
 *
 * @author LoongChow
 * @date 2018/10/26
 */
@Configuration
public class Swagger2Config {

    @Value("${swagger2.module.base-package:com.wangc}")
    private String basePackage;

    @Value("${swagger2.module.title:commons api}")
    private String apiTitle;

    @Value("${swagger2.module.description:commons api}")
    private String apiDesc;

    @Value("${swagger2.module.serviceUrl:www.sfuwow.com}")
    private String serviceUrl;

    @Value("${swagger2.module.version:V1.0}")
    private String apiVersion;

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).pathMapping("/")
                // 选择那些路径和api会生成document
                .select()
                // 对所有api进行监控
                // .apis(RequestHandlerSelectors.any())
                // 只展示com.yx包下的接口
                .apis(RequestHandlerSelectors.basePackage(basePackage))
                // 不显示错误的接口地址 //错误路径不监控
                .paths(Predicates.not(PathSelectors.regex("/error.*")))
                // 对根下所有路径进行监控
                .paths(PathSelectors.regex("/.*")).build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title(apiTitle).description(apiDesc).version(apiVersion).build();
    }
}
